package changjietong;

import java.util.Arrays;
import java.util.Comparator;

public class UniquePermutationsCount {
    
    public static void main(String[] args) {
        // 包含0到9的数字数组
        int[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

        // 用于跟踪哪些数字已被使用的布尔数组
        boolean[] used = new boolean[10];
        
        // 计算4位排列的数量
        int count = countPermutations(digits, used, 0);
        
        // 打印总的排列数量
        System.out.println("Total unique 4-digit permutations: " + count);
    }
    
    /**
     * 计算所有唯一的4位排列的数量。
     * 
     * @param digits  用于排列的数字数组
     * @param used    跟踪数字是否已被使用的布尔数组
     * @param depth   当前排列的深度（已选择的数字数量）
     * @return        4位排列的数量
     */
    private static int countPermutations(int[] digits, boolean[] used, int depth) {
        // 基本情况：如果当前排列有4个数字，返回1（表示找到一个有效排列）
        if (depth == 4) {
            return 1;
        }
        
        int count = 0;
        
        // 遍历每个数字生成排列
        for (int i = 0; i < digits.length; i++) {
            // 跳过已经在当前排列中使用过的数字
            if (used[i]) continue;
            
            // 选择当前数字
            used[i] = true;
            
            // 递归计算剩余部分的排列数量
            count += countPermutations(digits, used, depth + 1);
            
            // 回溯：将当前数字标记为未使用
            used[i] = false;
        }
        
        return count;
    }
}
